function - 将动态创建的函数作为参数传递
全部标签 我有一个Seller模型,其中有_manyItems。我想获得卖家所有商品的总售价。在seller.rb我有deftotal_item_costitems.to_a.sum(&:sale_price)end如果所有商品都有促销价,这会很好用。但是,如果它们尚未售出,则sale_price为零并且total_item_cost中断。在我的应用中,sale_price可以是nil或零。在我的total_item_cost方法中,如何将nil值视为零? 最佳答案 items.map(&:sale_price).compact.sum或it
给定一个查询对象(不是AR模型)classComplexQueryQUERY=如何方便地转义所有参数?我成功地使用了三种技术,但没有一种是方便的。使用raw_connection(对我而言)返回PG::Conn的实例并调用exec_params。我对此并不满意,因为exec_params需要一组详细的参数来指定数据类型。在我的查询对象中包含ActiveRecord::Sanitization并使用其中一种方便的方法,例如replace_named_bind_variables。我对此不满意,因为replace_named_bind_variables是protected并且我必须使用s
我们最近开始在我们公司插入合规性,并且需要保留对我们当前在Rails应用程序中管理的数据更改的完整历史记录。我们已经获准将每个操作的描述性内容简单地推送到日志文件,这是一种相当不引人注目的方式。我倾向于在ApplicationController中做这样的事情:around_filter:set_logger_usernamedefset_logger_usernameThread.current["username"]=current_user.login||"guest"yieldThread.current["username"]=nilend然后创建一个看起来像这样的观察者:c
在详细介绍之前,我先开门见山:有没有人想出一种方法让Carrierwave将文件的名称保存为时间戳或每个文件唯一的任意字符串?默认情况下,Carrierwave将每个文件及其替代版本保存在自己的目录中(以型号ID号命名)。我不喜欢这个,因为不是一个目录有1,000个,为了使用大的整数,文件(在我的例子中是图片),我们得到一个目录有1,000个子目录,每个子目录有一个或两个文件。呸。现在,当您将uploader的store_dir方法重写为如下内容时:defstore_dir"uploads/#{model.class.to_s.underscore}/#{mounted_as}"end
我真的很喜欢将contexts、subjects和its与rspec一起使用来真正清理我的测试代码。典型例子:context"asauser"dosubject{Factory:user}its(:name){should=="Bob"}end但我想不通的是如何使这种情况动态化(即基于其他对象)。its似乎对block内的属性进行实例评估,因此我无法访问它周围的所有内容。我很想做这样的事情:its(:name){should==subject.contact.name}但我看不出有什么方法可以实现这一点。有谁知道是否有一些方法代理到这个实例eval来访问原始对象?或者如果有任何其他方法
简单的问题:我希望能够在config.ru中将选项传递到我的sinatra应用程序中。这怎么可能?我的config.ru看起来像这样:runMyApp但我想在我的MyApp类中使用它来接受参数:classMyApp但是我想不出一个办法来做到这一点。想法? 最佳答案 使用set/settingsrequire'sinatra/base'classMyApp使用配置文件。参见Sinatra::ConfigFile在contrib中(它也使用set和settings,但从YAML文件加载参数)
我刚刚开始学习Ruby,我编写了一个程序来生成一些数字并将它们分配给变量@one、@two、@three等。然后用户可以通过输入它来指定要更改的变量姓名(例如一个)。然后我需要做一些类似“@[valueofinout]=asd”的事情。我该怎么做,是否有更好的方法,因为我正在考虑的方式似乎不鼓励?我找到了x="myvar"myvar="hi"eval(x)->"hi"但我不完全明白为什么需要第二行。就我而言,我会使用类似的东西@one="21"input="one"input="@"+inputchangeto="22"eval(input)->changeto
我很想知道[]和Array.new以及{}和Hash.new之间的更多区别我对它进行了相同的基准测试,似乎简写是赢家require'benchmark'many=500000Benchmark.bmdo|b|b.report("[]\t"){many.times{[].object_id}}b.report("Array.new\t"){many.times{Array.new.object_id}}b.report("{}\t"){many.times{{}.object_id}}b.report("Hash.new\t"){many.times{Hash.new.object_id
我正在尝试从散列(使用嵌套散列)生成attr_reader,以便它自动镜像instance_variable创建。这是我目前所拥有的:data={:@datetime=>'2011-11-23',:@duration=>'90',:@class=>{:@price=>'£7',:@level=>'all'}}classEvent#attr_reader:datetime,:duration,:class,:price,:leveldefinit(data,recursion)data.eachdo|name,value|ifvalue.is_a?Hashinit(value,recur
我正在尝试创建一个脚本来遍历索引,查看每个页码,并告诉我该条目在书中的哪一章。这是我正在做的事情的近似值:@chapters={1=>"introduction.xhtml",2..5=>"chapter1.xhtml",6..10=>"chapter2.xhtml",11..18=>"chapter3.xhtml",19..30=>"chapter4.xhtml"}deffind_chapter(number)@chapters.eachdo|page_range,chapter_name|ifnumber===page_rangeputs""+number.to_s+"endend